package core;

import servidor.rede.SelectiveRepeat;
import cliente.rede.ConexaoCliente;
import interfaces.InterfaceRedeGUI;
import dados.Arquivo;
import dados.Cliente;
import dados.ListaTransferencia;
import dados.Transferencia;

public class RedeGUI implements InterfaceRedeGUI{
	
	ConexaoCliente cliente=null;
	
	public ConexaoCliente getCliente() {
		return cliente;
	}

	public void setCliente(ConexaoCliente cliente) {
		this.cliente = cliente;
	}

	public String getIniciar(String itemSelecionado) {
		if(itemSelecionado!=null){	
			System.out.println(itemSelecionado);
			
			SelectiveRepeat.clicouIniciar.set(true);
			
			synchronized(this){
				System.out.println("tentou setar O NOME COMO :"+itemSelecionado);
				ConexaoCliente.nomeMusica = itemSelecionado;
				if(ConexaoCliente.nomeMusica!=null||ConexaoCliente.nomeMusica!="")System.out.println("setou o nome como: "+ConexaoCliente.nomeMusica);
				ConexaoCliente.enviarNomeMusica.set(true);//envia o nome da musica para o servidor.
			}
			
			InterfaceRedeGUI interfaceRedeGUI = new RedeGUI();
			interfaceRedeGUI.novaTransferencia(itemSelecionado, ConexaoCliente.ipServidor.toString(), ConexaoCliente.portaServidor);
			//this.cliente.
			
			return itemSelecionado;
		}
		return null;
	}

	public String getPausar(String itemSelecionado) {
		if(itemSelecionado!=null){
			System.out.println(itemSelecionado);
			return itemSelecionado;
		}
		return null;
	}

	public String getCancelar(String itemSelecionado) {
		if(itemSelecionado!=null){
			System.out.println(itemSelecionado);
			return itemSelecionado;
		}
		return null;
	}

	public String getReiniciar(String itemSelecionado) {
		if(itemSelecionado!=null){ 
			System.out.println(ListaTransferencia.zeraTransferencia(itemSelecionado));
			System.out.println(itemSelecionado);
			return itemSelecionado;
		}
		return null;
	}

	public void novoUsuarioConectado(String ip, String porta) {
		new Cliente(ip,porta);
	}

	public void novoUsuarioConectado(String ip, int porta) {
		new Cliente(ip,porta);
	}

	public void novaTransferencia(Object arquivo, Object cliente) {
		if( arquivo instanceof Arquivo &&
			cliente instanceof Cliente )
		new Transferencia((Arquivo)arquivo,(Cliente)cliente);
	}

	
	public void novaTransferencia(String nomeDoArquivoDeMusica,
			String urlDoArquivoDeMusica, String ipFornecido,
			String portaFornecida) {
		Arquivo arquivo = Arquivo.instanciaArquivo(nomeDoArquivoDeMusica, urlDoArquivoDeMusica);
		//Arquivo arquivo = new Arquivo(nomeDoArquivoDeMusica,urlDoArquivoDeMusica);
		Cliente cliente = Cliente.instanciaCliente(ipFornecido, portaFornecida);
		//Cliente cliente = new Cliente(ipFornecido, portaFornecida);
		new Transferencia(arquivo,cliente);
	}

	
	public void novaTransferencia(String nomeDoArquivoDeMusica,
			String ipFornecido, String portaFornecida) {
		Arquivo arquivo = Arquivo.instanciaArquivo(nomeDoArquivoDeMusica);
		//Arquivo arquivo = new Arquivo(nomeDoArquivoDeMusica,"./");
		Cliente cliente = Cliente.instanciaCliente(ipFornecido, portaFornecida);
		//Cliente cliente = new Cliente(ipFornecido, portaFornecida);
		new Transferencia(arquivo,cliente);
	}

	
	public void novaTransferencia(String nomeDoArquivoDeMusica,
								  String ipFornecido, int portaFornecida) {
		Arquivo arquivo = Arquivo.instanciaArquivo(nomeDoArquivoDeMusica);
		//Arquivo arquivo = new Arquivo(nomeDoArquivoDeMusica,"./");
		Cliente cliente = Cliente.instanciaCliente(ipFornecido, portaFornecida);
		//Cliente cliente = new Cliente(ipFornecido, portaFornecida);
		if(arquivo==null)System.out.println("arquivo null");
		if(cliente==null)System.out.println("cliente null");
		if(arquivo!=null && cliente!=null) System.out.println(arquivo.getFilename()+" - "+ cliente.getNome());
		new Transferencia(arquivo,cliente);
	}

	
	public void novaTransferencia(String nomeDoArquivoDeMusica, String urlDoArquivoDeMusica, 
								  String ipFornecido, int portaFornecida) {
		Arquivo arquivo = Arquivo.instanciaArquivo(nomeDoArquivoDeMusica, urlDoArquivoDeMusica);
		//Arquivo arquivo = new Arquivo(nomeDoArquivoDeMusica,urlDoArquivoDeMusica);
		Cliente cliente = Cliente.instanciaCliente(ipFornecido, portaFornecida);
		//Cliente cliente = new Cliente(ipFornecido, portaFornecida);
		
		if(arquivo==null)System.out.println("arquivo null");
		if(cliente==null)System.out.println("cliente null");
		if(arquivo!=null && cliente!=null) System.out.println(arquivo.getFilename()+" - "+ cliente.getNome());
		
		new Transferencia(arquivo,cliente);
	}

	public void setTransferencia(String nomeDoArquivo, String ip, String percentual) {
		Transferencia trans = ListaTransferencia.findTransferencia(nomeDoArquivo, ip);
		if(trans!=null) trans.setProgresso(percentual);
		
	}

	public void setTransferencia(String nomeDoArquivo, String ip, int percentual) {
		Transferencia trans = ListaTransferencia.findTransferencia(nomeDoArquivo, ip);
		if(trans!=null) trans.setProgresso(percentual);
	}


}
